Настроим параметры установки окончаний строк и отображения unicode
для устройства Linux. После, в папке hello создадим файл
hello.html с содержимым, и инициализируем пустой
git-репозиторий
Настройка git, инициализация
репозитория
Создание проекта и
внесение изменений
Добавим файл в репозиторий.
Проверим текущее состояние репозитория командой git status
Добавление файла в репозиторий и проверка
состояния репозитория
Индексация изменений
Текущее содержимое файла hello.html
hello.html
Индексация изменений
Индексирую изменения командой git add hello.html и
проверяю. Теперь изменения проиндексированы.
Коммичу изменения командой git commit и снова проверяю
Индексация и коммит
изменений
Индексация изменений
Обновляю содержимое hello.html
hello.html
Индексация изменений
Добавляю это изменение в индекс командой git add
hello.html. Снова обновляю hello.html
Обновление hello.html
Индексация изменений
Проверяю текущие изменения. Добавляю последние изменения и коммичу.
Снова проверяю статус
Проверка статуса и коммит
Индексация изменений
Добавляю второе изменение в индекс и проверяю
Добавление второго изменения в индекс,
проверка
История
Получим список изменений командой git log
Для однострочного формата введем git log –pretty=oneline
Список изменений
История
Выведем справочную информацию командой man git-log
man git-log
История
Ввожу команду git checkout , где хэш - хэш первого
коммита. Также просматриваю содержимое файла - оно равняется содержимому
первого коммита
Переход к первому коммиту
История
Перехожу к последней версии ветки командой git checkout
master и просматриваю содержимое файла - теперь оно актуальное.
Создаю тег первой версии командой git tag v1. Перехожу к
версии, предшествующей v1, командой git checkout v1^.
Переход к последней версии и создание
тега v1
История
Создаю для предшествующей версии тэг v1-beta. Перехожу к
версии v1 и просматриваю все доступные тэги. Также просматриваю тэги в
логе командой git log master –all
Создание тэга предшествующей версии,
просмотр
Отмена локальных
изменений (до индексации)
Обновляю содержимое hello.html
hello.html
Отмена локальных
изменений (до индексации)
Проверяю состояние рабочего каталога (hello.html был изменен, но еще
не проиндексирован).
Командой git checkout переключаю версии файла hello.html в
репозитории
Команда git status показывает нам, что не было произведено
никаких изменений, не зафиксированных в рабочем каталоге.
Проверка состояния каталога до и после
индексации изменений
Отмена
проиндексированных изменений (перед коммитом)
Изменяю содержимое hello.html
hello.html
Отмена
проиндексированных изменений (перед коммитом)
Индексирую изменения командой git add hello.html. Проверяю
состояние изменения, после чего сбрасываю буферную зону командой git
reset HEAD hello.html. Переключаюсь на версию коммита командой
git checkout hello.html и снова проверяю статус. Проверяю
содержимой файла - изменений теперь нет.
Отмена проиндексированных изменений перед
коммитом
Отмена коммитов
Изменяю содержимое hello.html
hello.html
Отмена коммитов
Индексирую изменения и коммичу их командой git commit -m “Oops,
we didn’t want this commit”. Отменяю коммит командой git revert
HEAD - в результате получаю такой коммит
Отмена коммита
Отмена коммитов
Проверяю логи
Проверка логов
Удаление коммитов из ветки
Отмечаю последний коммит тэгом командой git tag oops.
Сбрасываю ветку до точки v1 командой git reset –hard v1.
Проверяю логи - информация о двух последних коммитах пропала
Сброс ветки и проверка логов
Удаление коммитов из ветки
Просматриваю все коммиты командой git log –all - здесь есть
и последние два коммита
Все коммиты
Удаление тега oops
Удаляю тэг oops командой git tag -d oops и проверяю
Удаление тэга
Внесение изменений в коммиты
Изменяю содержимое hello.html
hello.html
Внесение изменений в
коммиты
Индексирую изменения и коммичу их. После, снова редактирую файл,
добавляя почту, и коммичу изменения командой git commit –amend -m
“Add an author/email comment”, т.е. изменяя последний коммит.
Проверяю логи и вижу один новый коммит
Создание коммита и его
изменение
Перемещение файлов
Создаю папку lib и переношу страницу в каталог lib командой git
mv. Проверяю изменения командой git status. Коммичу
изменения
Перемещение файла в папку
lib
Подробнее о структуре
Создаю в корне файл index.html и заполняю его. Коммичу
изменения
index.html
Git внутри: Каталог .git
Просматриваю каталог со всей информацией о git командой ls -C
.git. Выполняю команду ls -C .git/objects. Также
просматриваю один из каталогов с именем из 2 букв. Просматриваю файл
конфигурации командой cat .git/config
Просмотр каталога .git
Работа непосредственно с
объектами git
Выполняю команду cat .git/HEAD - содержится ссылка на ветку
master. Просматриваю последний коммит командой git log
–max-count=1. Также вывожу последний коммит с помощью хэша командой
git cat-file
Просмотр последнего коммита
Работа непосредственно
с объектами git
Произвожу поиск дерева командой git cat-file, указав хеш
дерева. Аналогично вывожу каталог lib и файл hello.html
Поиск по хэшу
Работа непосредственно
с объектами git
Исследую репозиторий самостоятельно: перехожу к последующему коммиту
по хэшу родителя
Исследование репозитория
Создание ветки
Создаю ветку командой git checkout -b style и проверяю ее
статус. Создаю файл style.css в папке lib, заполняю его, индексирую и
коммичу. Обновляю файл lib/hello.html, добавляя в него ссылку на
css-файл, и также индексирую и коммичу изменения. Обновляю файл
index.html, индексирую и коммичу изменения
Обновление файлов, индексация и
коммиты
Навигация по веткам
Проверяю логи последних коммитов, вижу все созданные коммиты, они в
ветке style
Проверка логов
Навигация по веткам
Перехожу в ветку master и просматриваю содержимое файла
lib/hello.html - в нем нет последних изменений. Просматриваю тот же файл
в ветке style - изменения есть
Проверка файла в разных
ветках
Изменения в ветке master
Перехожу в ветку master и создаю файл README.md командой echo
“This is the Hello World example from the git tutorial.” >
README.md. Коммичу изменения и просматриваю логи, включая различия
между ветками.
Создание README в ветке master, проверка
дерева веток
Слияние
Перехожу в ветку style командой git checkout style. Сливаю
master c style командой git merge master. Вывожу логи с деревом
всех веток
Слияние master с style
Создание конфликта
Возвращаюсь в ветку master и редактирую файл lib/hello.html. Коммичу
изменения, просматриваю логи
Редактирование lib/hello.html в
master
Разрешение конфликтов
Перехожу в ветку style и пытаюсь слить master с style. В файле
lib/hello.html возникли конфликты. Разрешаю конфликты и коммичу
изменения
Разрешение конфликта
Сброс ветки style
Перехожу в ветку style и просматриваю логи изменений
Логи изменений ветки style
Сброс ветки style
Сбрасываю ветку к коммиту «Updated index.html» командой git
reset –hard c использованием хэша коммита. Снова првоеряю
лог ветки style
Сброс ветки style с помощью git
reset
Сброс ветки master
Перехожу в ветку master и аналогичным образом сбрасываю ее к коммиту
«Added README». Просматриваю лог ветки master
Сброс ветки master
Перебазирование
Перехожу в ветку style и использую вместо слияния команду git
rebase master. Просматриваю лог ветки.
Перебазирование ветки
Слияние в ветку master
Перехожу в ветку master и сливаю style c master. Просматриваю лог -
теперь ветки style и master идентичны.
Слияние style c master
Клонирование
репозиториев и просмотр клонированного репозитория
Перехожу в родительский каталог. Создаю клон репозитория hello в
папке cloned_hello командой git clone hello cloned_hello.
Перехожу в cloned_hello и просматриваю папки и файлы. Вывожу список всех
коммитов командой git log –all
Создание и просмотр клонированного
репозитория
Что такое origin? Удаленные
ветки
Выполняю команды git remote и git remote show
origin для более подробнной информации. Просматриваю ветки,
доступные в клонированном репозитории, командой git branch.
Просматриваю все ветки командой git branch -а
git remote, просмотр веток
Изменение оригинального
репозитория
Редактирую README.md в репозитории hello и коммичу изменения. В
клонированном репозитории выполняю git fetch для извлечения
изменений, проверяю лог - вижу последний сделанный коммит
Редактирование оригинального репозитория
и извлечение изменений в клонированном
Слияние извлеченных
изменений
Проверяю клонированный файл README.md - он не изменился. Выполняю
слияние извлеченных изменений командой git merge origin/master.
Снова проверяю содержимое файла - теперь оно обновилось.
Проверка файла до и после слияния
изменений
Добавление ветки наблюдения
Выполняю: git branch –track style origin/style git branch -a git log –max-count=2
Теперь можно видеть ветку style в списке веток и логе
Добавление ветки наблюдения
Создание
чистого репозитория, добавление удаленного репозитория
Создаю чистый репозиторий командой git clone –bare hello
hello.git и перехожу в него. Добавляю удаленный репозиторий
командой git remote add shared ../hello.git. Редактирую файл
README.md и отправляю изменения в общий репозиторий. В клонированном
репозитории добавляю командой git remote add shared
../hello.git, и извлекаю сделанные изменения командой git pull
shared master, проверяю файл
Создание чистого репозитория, добавление
удаленного репозитория, извлечение общих изменений
Выводы
Я настроил git, научился с ним работать, узнал про различные ветки,
слияние, перебазирование, чистые репозитории.